package a_doubleWrite;

import util.ListNode;

/**
 * 19. 删除链表的倒数第 N 个结点
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 *
 * 进阶：你能尝试使用一趟扫描实现吗？
 * @author: luolidong
 * @create: 2021-07-19 10:37
 * @version: 1.0
 */
public class L19 {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head.next==null&&n>=1) return null;
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        //快指针先走n步
        ListNode fast=dummy,slow=dummy;
        while (n>0){
            fast=fast.next;
            n--;
        }
        while (fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }
        //此时slow是前一个
        slow.next=slow.next.next;

        return dummy.next;
    }
}
